/**
 * 取得语言  TODO: 语言映射  {key:val, ...}
 * 		若key语言未定义,则使用val语言  小写,'_'分割
 * 		优先: 全名 > 映射全名 > 映射前缀('_'分割首个)
 * 		前缀名: {zh:'zh_cn'}, 未定义`zh_*`全用`zh_cn`
 * @param key string 语言编码
 * @param args json|null 语言模板参数
 * @param arr array|null 接受语言 优先排序 null:zh_cn
 * @return string
 */
$.lang = function(key, args, arr=null){
	const sptArr=key.split('.'), K=sptArr.pop();
	const M=$.__lang[sptArr.join('.')];  let v, t;
	if(!arr) v = M['zh_cn'][K];
	else for(t of arr) if(M[t]){ v=M[t][K];break; }
	const RE = k=>v=v.replaceAll(`{${k}}`,args[k]);
	args&&Object.keys(args).forEach(RE);  return v;
};
Object.defineProperty($, '__lang', {value:{}});
$.lang.reg=(p,m)=>$.__lang[p]=$.mix($.__lang[p],m);

